package br.unicamp.ic.inf312.arena.modelo.vendas;
/*
 * ArenaTicketMain - Venda de Bilhetes Eletronicos para Espetaculos (Arena Entretenimento S.A.)
 * Bilhete.java
 * ©2006
 */
import br.unicamp.ic.inf312.arena.modelo.logistico.Assento;
import br.unicamp.ic.inf312.arena.modelo.logistico.Evento;
import br.unicamp.ic.inf312.arena.modelo.pessoa.Espectador;
import br.unicamp.ic.inf312.framework.modelo.ModeloBase;

/**
 * @author  inf312
 */
public class Bilhete extends ModeloBase {
	public static final int ESTADO_RESERVA = 0;
	public static final int ESTADO_VENDIDO = 1;
	public static final int ESTADO_DEVOLVIDO = 2;
	//
	public static final int TIPO_INTEIRO = 0;
	public static final int TIPO_MEIA_ENTRADA = 1;

	private long numero;
	private int estado;
	private int tipo;
	private Espectador espectador;
	private Evento evento;
	private Compra compra;
	private Assento assento;
	private Estorno estorno;

	/**
	 * 
	 * @param tipo
	 * @return String (tipo de Bilhete por extenso)
	 */
	public static String obterDescricaoTipoBilhete(int tipo) {
		String strDescricao = "";
		switch (tipo) {
		case TIPO_INTEIRO:
			strDescricao = " Inteira ";
			break;
		case TIPO_MEIA_ENTRADA:
			strDescricao = " 1/2 entrada ";
			break;
		default:
			break;
		}
		return strDescricao;
	}

	public Bilhete() {
		super();
	}
	
	/**
	 * 
	 * @param numero
	 * @param estado
	 * @param espectador
	 * @param evento
	 * @param compra
	 * @param assento
	 */
	public Bilhete(long numero, int estado, Espectador espectador,
			Evento evento, Compra compra, Assento assento) {
		super();
		this.numero = numero;
		this.estado = estado;
		this.espectador = espectador;
		this.evento = evento;
		this.compra = compra;
		this.assento = assento;
	}

	/**
	 * 
	 * @param numero
	 * @param estado
	 * @param espectador
	 * @param evento
	 * @param compra
	 * @param assento
	 * @param estorno
	 */
	public Bilhete(long numero, int estado, Espectador espectador,
			Evento evento, Compra compra, Assento assento, Estorno estorno) {
		super();
		this.numero = numero;
		this.estado = estado;
		this.espectador = espectador;
		this.evento = evento;
		this.compra = compra;
		this.assento = assento;
		this.estorno = estorno;
	}

	/**
	 * IMPORTANTE: Este metodo deve ser sobrescrito pelas subclasses.
	 * Diferenciar valor para Meia-entrada e inteira.
	 * 
	 * @return double
	 */
	public double getValor() { return 0.00D; }

	public Evento getEvento() {
		return this.evento;
	}

	public Espectador getEspectador() {
		return this.espectador;
	}

	public Assento getAssento() {
		return this.assento;
	}

	public Compra getCompra() {
		return compra;
	}

	public void setCompra(Compra compra) {
		this.compra = compra;
	}

	public int getEstado() {
		return estado;
	}

	public void setEstado(int estado) {
		this.estado = estado;
	}

	public long getNumero() {
		return this.numero;
	}

	public void setNumero(long numero) {
		this.numero = numero;
	}

	public void setAssento(Assento assento) {
		this.assento = assento;
	}

	public void setEspectador(Espectador espectador) {
		this.espectador = espectador;
	}

	public void setEvento(Evento evento) {
		this.evento = evento;
	}

	public int getTipo() {
		return tipo;
	}

	public void setTipo(int tipo) {
		this.tipo = tipo;
	}

	public Estorno getEstorno() {
		return estorno;
	}

	public void setEstorno(Estorno estorno) {
		this.estorno = estorno;
	}
}